package pumps

// import (
// 	"context"
// 	"fmt"
// 	"log/syslog"

// 	"gitee.com/youkelike/ziam/zanalytics"
// 	"gitee.com/youkelike/zlog"
// 	"github.com/mitchellh/mapstructure"
// )

// type SyslogConf struct {
// 	Transport   string `mapstructure:"transport"`
// 	NetworkAddr string `mapstructure:"network_addr"`
// 	LogLevel    int    `mapstructure:"log_level"`
// 	Tag         string `mapstructure:"tag"`
// }

// var logPrefix = "syslog-pump"

// type SyslogPump struct {
// 	syslogConf *SyslogConf
// 	writer     *syslog.Writer
// 	filters    zanalytics.AnalyticsFilters
// 	timeout    int
// 	CommonPumpConfig
// }

// func (s *SyslogPump) New() Pump {
// 	return &SyslogPump{}
// }

// func (s *SyslogPump) GetName() string {
// 	return "Syslog Pump"
// }

// func (s *SyslogPump) Init(config interface{}) error {
// 	// Read configuration file
// 	s.syslogConf = &SyslogConf{}
// 	err := mapstructure.Decode(config, &s.syslogConf)
// 	if err != nil {
// 		zlog.Fatalw("Failed to decode configuration: %s", err.Error())
// 	}

// 	// Init the configs
// 	initConfigs(s)

// 	// Init the Syslog writer
// 	initWriter(s)

// 	zlog.Debugw("Syslog Pump active")

// 	return nil
// }

// func (s *SyslogPump) WriteData(ctx context.Context, data []interface{}) error {
// 	// Data is all the analytics being written
// 	for _, v := range data {
// 		select {
// 		case <-ctx.Done():
// 			return nil
// 		default:
// 			// Decode the raw analytics into Form
// 			decoded, _ := v.(zanalytics.AnalyticsRecord)
// 			message := Message{
// 				"timestamp":  decoded.TimeStamp,
// 				"username":   decoded.Username,
// 				"effect":     decoded.Effect,
// 				"conclusion": decoded.Conclusion,
// 				"request":    decoded.Request,
// 				"policies":   decoded.Policies,
// 				"deciders":   decoded.Deciders,
// 				"expireAt":   decoded.ExpireAt,
// 			}

// 			// Print to Syslog
// 			_, _ = fmt.Fprintf(s.writer, "%s", message)
// 		}
// 	}

// 	return nil
// }

// func initConfigs(pump *SyslogPump) {
// 	if pump.syslogConf.Transport == "" {
// 		pump.syslogConf.Transport = "udp"
// 		zlog.Infow("No Transport given, using 'udp'")
// 	}

// 	if pump.syslogConf.Transport != "udp" &&
// 		pump.syslogConf.Transport != "tcp" &&
// 		pump.syslogConf.Transport != "tls" {
// 		zlog.Fatalw("Chosen invalid Transport type.  Please use a supported Transport type for Syslog")
// 	}

// 	if pump.syslogConf.NetworkAddr == "" {
// 		pump.syslogConf.NetworkAddr = "localhost:5140"
// 		zlog.Infow("No host given, using 'localhost:5140'")
// 	}

// 	if pump.syslogConf.LogLevel == 0 {
// 		zlog.Warnw("Using Log Level 0 (KERNEL) for Syslog pump")
// 	}
// }

// func initWriter(s *SyslogPump) {
// 	tag := logPrefix
// 	if s.syslogConf.Tag != "" {
// 		tag = s.syslogConf.Tag
// 	}
// 	syslogWriter, err := syslog.Dial(
// 		s.syslogConf.Transport,
// 		s.syslogConf.NetworkAddr,
// 		syslog.Priority(s.syslogConf.LogLevel),
// 		tag)
// 	if err != nil {
// 		zlog.Fatalw("failed to connect to Syslog Daemon: %s", err.Error())
// 	}

// 	s.writer = syslogWriter
// }

// // SetTimeout set attributes `timeout` for SyslogPump.
// func (s *SyslogPump) SetTimeout(timeout int) {
// 	s.timeout = timeout
// }

// // GetTimeout get attributes `timeout` for SyslogPump.
// func (s *SyslogPump) GetTimeout() int {
// 	return s.timeout
// }

// // SetFilters set attributes `filters` for SyslogPump.
// func (s *SyslogPump) SetFilters(filters zanalytics.AnalyticsFilters) {
// 	s.filters = filters
// }

// // GetFilters get attributes `filters` for SyslogPump.
// func (s *SyslogPump) GetFilters() zanalytics.AnalyticsFilters {
// 	return s.filters
// }
